export default {

	/**
	 * 返回格式为yyyy-MM-dd HH:mm:ss的时间
	 * @param {Object} dateTime
	 */
	dateFormatYMDHMS(dateTime) {
		let date = new Date(dateTime);
		let year = date.getFullYear();
		/* 在日期格式中，月份是从0开始的，因此要加0
		 * 使用三元表达式在小于10的前面加0，以达到格式统一  如 09:11:05
		 * */
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
		let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
		let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
		let seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
		// 拼接
		return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
	},

	/**
	 * 返回格式为yyyy-MM-dd的时间
	 * @param {Object} dateTime
	 */
	dateFormatYMD(dateTime) {
		let date = new Date(dateTime);
		let year = date.getFullYear();
		/* 在日期格式中，月份是从0开始的，因此要加0
		 * 使用三元表达式在小于10的前面加0，以达到格式统一  如 09:11:05
		 **/
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
		// 拼接
		return year + "-" + month + "-" + day;
	},

	/**
	 * 返回格式为yyyy年MM月的时间
	 * @param {Object} dateTime
	 */
	dateFormatYM(dateTime) {
		let date = new Date(dateTime);
		let year = date.getFullYear();
		/* 在日期格式中，月份是从0开始的，因此要加0
		 * 使用三元表达式在小于10的前面加0，以达到格式统一  如 09:11:05
		 **/
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		// 拼接
		return year + "年" + month + "月";
	},

	/**
	 * 返回格式为yyyy-MM的时间
	 * @param {Object} dateTime
	 */
	dateFormatYM2(dateTime) {
		let date = new Date(dateTime);
		let year = date.getFullYear();
		/* 在日期格式中，月份是从0开始的，因此要加0
		 * 使用三元表达式在小于10的前面加0，以达到格式统一  如 09:11:05
		 **/
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		// 拼接
		return year + "-" + month;
	},

	/**
	 * 返回格式为yyyy-MM-dd HH:mm:00的时间
	 * @param {Object} dateTime
	 */
	dateFormatYMDHm0(dateTime) {
		let date = new Date(dateTime);
		let year = date.getFullYear();
		/* 在日期格式中，月份是从0开始的，因此要加0
		 * 使用三元表达式在小于10的前面加0，以达到格式统一  如 09:11:05
		 **/
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
		let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
		let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
		// 拼接
		return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":00";
	},

	/**
	 * 返回格式为MM-dd的时间
	 * @param {Object} dateTime
	 */
	dateFormatMD(dateTime) {
		let date = new Date(dateTime);
		/* 在日期格式中，月份是从0开始的，因此要加0
		 * 使用三元表达式在小于10的前面加0，以达到格式统一  如 09:11:05
		 **/
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
		// 拼接
		return month + "-" + day + " ";
	},

	/**
	 * 获取当前月的最后一天
	 * @param {Object} datetime:当前月的日期（年月日时分秒）
	 */
	getCurrentMonthLastDay(datetime) {
		let currentMonth = datetime.getMonth();
		let nextMonth = ++currentMonth;
		let nextMonthFirstDay = new Date(datetime.getFullYear(), nextMonth, 1);
		let oneDay = 1000 * 60 * 60 * 24;
		let lastTime = new Date(nextMonthFirstDay - oneDay);
		let month = parseInt(lastTime.getMonth() + 1);
		let day = lastTime.getDate();
		return day;
	},

	/**
	 * 获取当天开始时间
	 */
	getStartDate() {
		return new Date(new Date(new Date().toLocaleDateString()).getTime());
	},

	/**
	 * 获取当前的结束时间
	 */
	getEndDate() {
		return new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1);
	},


	/**
	 * 获得本周时间差
	 * callback 回调参数
	 * dateTime 是否自己传递参数 传递参数建议传递开始时间
	 * */
	getTime: function() {
		let now = new Date(); //当前日期

		let nowDayOfWeek = now.getDay(); //今天本周的第几天
		let nowDay = now.getDate(); //当前日
		let nowMonth = now.getMonth(); //当前月
		let nowYear = now.getFullYear(); //当前年
		nowYear += (nowYear < 2000) ? 1900 : 0;

		/** 上个月开始 */
		let startLastMonth = new Date(nowYear, nowMonth - 1);
		/** 上个月结束 */
		let endLastMonth = new Date(nowYear, nowMonth, 0, +"23", +"59", +"59");
		/** 昨天*/
		let yesterdayStart = new Date(nowYear, nowMonth, nowDay - 1);
		/** 昨天结束*/
		let yesterdayEnd = new Date(nowYear, nowMonth, nowDay - 1, +"23", +"59", +"59");
		/** 获得本周的开始日期     获取周一 */
		let weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1);
		/** 获得上周的结束日期     获取周日 */
		let endLastWeekDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek );
		/** 获得上周的开始日期     获取周一 */
		let endLastStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 6 );
		/** 本周日的日期   获取当前日期 */
		now.setDate(now.getDate() + 6);
		let weekEndDate = new Date(nowYear, nowMonth, nowDay, +"23", +"59", +"59");
		/** 本月1号 **/
		let startThisMonth = nowYear + "-" + (nowMonth + 1 < 10 ? "0" + (nowMonth + 1) : nowMonth + 1) + "-0" + 1;
		/** 获取今年第一天 */
		let startThisYear = nowYear + "-01-01";
		/** 获取上一年的今天 */
		let upperYearDate = new Date(nowYear-1, nowMonth, nowDay );

		/** 本月结束 */
		let endThisMonth = new Date(nowYear, nowMonth + 1, 0, +"23", +"59", +"59");
		return {
			/** 昨天开始 */
			startYesterday: yesterdayStart,
			/** 昨天结束 */
			endYesterday: yesterdayEnd,
			/** 这周开始时间*/
			startWeek: weekStartDate,
			/** 这周结束时间*/
			endWeek: weekEndDate,
			/** 本周的开始日期*/
			endLastWeekDate: endLastWeekDate,
			/** 上周的结束日期*/
			endLastStartDate: endLastStartDate,
			/** 上个月开始 */
			startLastMonth: startLastMonth,
			/** 上个月结束 */
			endLastMonth: endLastMonth,
			/** 本月1号 **/
			startThisMonth: startThisMonth,
			/** 今年第一天 */
			startThisYear: startThisYear,
			/** 获取上一年的今天 */
			upperYearDate: upperYearDate,

			/** 本月结束 */
			endThisMonth: endThisMonth
		}
	},

	// 比较两个时间大小
	compareTimeSize(dateStr) {
		return new Date(Date.parse(beginTime.replace(/-/g, "/")));
	},

	/**
	 * 可以根据天数、时、分、秒 (增加 || 减少)，改变日期
	 * @param datetime
	 * @param dayNum
	 * @param numberType 时间类型
	 * @param arithmetic 运算符号 (+,-)
	 */
	addOrMinusDay(datetime, dayNum, numberType, arithmetic) {
		let timestamp = 0;
		if (numberType === 'day') {
			timestamp = dayNum * 1000 * 60 * 60 * 24;
		} else if (numberType === 'hours') {
			timestamp = dayNum * 1000 * 60 * 60;
		} else if (numberType === 'min') {
			timestamp = dayNum * 1000 * 60;
		} else if (numberType === 'sec') {
			timestamp = dayNum * 1000;
		} else {
			uni.showToast({
				icon: none,
				title: '请在类型中选择日(day)、时(hours)、分(min)、秒(sec)的其中一个英文字母填入',
			})
			return false;
		}
		
		let dateTimestamp = new Date(datetime).getTime();
		let currentTimestamp = '';
		if (arithmetic == '-'){
			currentTimestamp = dateTimestamp - timestamp;
		}else {
			currentTimestamp = dateTimestamp + timestamp;
		}
		
		let date = new Date(currentTimestamp);
		let year = date.getFullYear();
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
		let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
		let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
		let second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();

		let dateYMDHMS = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + second;
		let dateYMD = year + "-" + month + "-" + day;
		return {
			/** 显示时分秒 **/
			dateYMDHMS: dateYMDHMS,
			/** 不显示时分秒 **/
			dateYMD: dateYMD,
		}
	},

	getEndTime(dateTime){
		let date = new Date(dateTime);
		let year = date.getFullYear();
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		let day = date.getDate()< 10 ? "0" + date.getDate() : date.getDate();
		return year + "-" + month + "-" + day + " " + 23 + ":" + 59 + ":" + 59;
	},
	
	getStartTime(dateTime){
		let date = new Date(dateTime);
		let year = date.getFullYear();
		let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		let day = date.getDate()< 10 ? "0" + date.getDate() : date.getDate();
		return year + "-" + month + "-" + day + " " + "00:00:00";
	},
	//获取最近半年时间
	haflYear() {
		// 先获取当前时间
		var curDate = (new Date()).getTime()
		// 将半年的时间单位换算成毫秒
		var halfYear = 365 / 2 * 24 * 3600 * 1000
		// 半年前的时间（毫秒单位）
		var pastResult = curDate - halfYear
		// 日期函数，定义起点为半年前
		var pastDate = new Date(pastResult)
		var pastYear = pastDate.getFullYear()
		var pastMonth = pastDate.getMonth() + 1
		var pastDay = pastDate.getDate()
		if (pastMonth >= 1 && pastMonth <= 9) {
			pastMonth = '0' + pastMonth
		}
		if (pastDay >= 0 && pastDay <= 9) {
			pastDay = '0' + pastDay
		}
		var endDate = pastYear + '-' + pastMonth + '-' + pastDay
		return endDate;
	},
	
	// 北京时间：2021-11-18 22:14:24
	/* 时间yyyy-MM-dd HH:mm:ss转为时间戳 */
	  timeToTimestamp(time){
	    let timestamp = Date.parse(new Date(time).toString());
	    //timestamp = timestamp / 1000; //时间戳为13位需除1000，时间戳为13位的话不需除1000
	    return timestamp;
	  },
	  //最近一周不包含当天
	  getDateRange(dateNow, intervalDays, bolPastTime) {
	  	let oneDayTime = 24 * 60 * 60 * 1000;
	  	let list = [];
	  	let lastDay;
	  
	  	if (bolPastTime == true) {
	  		lastDay = new Date(dateNow.getTime() - intervalDays * oneDayTime);
	  		list.push(this.formateDate(lastDay));
	  		list.push(this.formateDate(dateNow));
	  	} else {
	  		lastDay = new Date(dateNow.getTime() + intervalDays * oneDayTime);
	  		list.push(this.formateDate(dateNow));
	  		list.push(this.formateDate(lastDay));
	  	}
	  	return list;
	  },
	  formateDate(time) {
	  	let year = time.getFullYear()
	  	let month = time.getMonth() + 1
	  	let day = time.getDate()
	  
	  	if (month < 10) {
	  		month = '0' + month
	  	}
	  
	  	if (day < 10) {
	  		day = '0' + day
	  	}
	  
	  	return year + '-' + month + '-' + day + ''
	  },


	/**
	 * 计算两个日期之间的月份数
	 * @param {Date or String} date1 日期1
	 * @param {Date or String} date2 日期2
	 * @returns 两个日期相差的月份数
	 */
	dateMonth(date1,date2){
		const dateOne = new Date(date1);
		const dateTwo = new Date(date2);
		// 第一个日期的年和月
		const yearOne = dateOne.getFullYear();
		const monthOne = dateOne.getMonth() + 1;
		// 第二个日期的年和月
		const yearTwo = dateTwo.getFullYear();
		const monthTwo = dateTwo.getMonth() + 1;
		// 两个日期的月份数
		const oneMonthNum = yearOne * 12 + monthOne;
		const twoMonthNum = yearTwo * 12 + monthTwo;
		return Math.abs(oneMonthNum - twoMonthNum);
	},
	// 获取两个时间之间的所有yyyy-mm格式的时间
	getMonthsBetween(date1, date2) {
	    let arr = [];
	    let currentDate = new Date(date1);
	    let endDate = new Date(date2);

	    while (currentDate <= endDate) {
	        arr.push(
	            `${currentDate.getFullYear()}-${('0' + (currentDate.getMonth() + 1)).slice(-2)}`
	        );
	        currentDate.setMonth(currentDate.getMonth() + 1);
	    }
	    return arr;
	}
	
}
